﻿#define _CRT_SECURE_NO_WARNINGS

//#include<iostream>
//using namespace std;
//class Date
//{
//public:
//	//构造函数函数名与类名相同
//	Date()
//	{
//		//构造函数
//		cout << "Date()" << endl;
//	}
//	// 构造函数可以重载
//	Date(int y)
//	{
//		cout << "Date(int y)" << endl;
//	}
//
//};
//int main()
//{
//	Date d1;//创建一个对象
//	Date d2(2);
//	return 0;
//}

//#include<iostream>
//using namespace std;
//class Date
//{
//public:
//	Date()
//	{
//		cout << "Date()" << endl;
//	}
//	/*Date(int y = 2)
//	{
//		cout << "Date(int y)" << endl;
//	}*/
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//int main()
//{
//	Date d1;//创建一个对象
//	return 0;
//}



//#include<iostream>
//using namespace std;
//typedef int STDataType;
//class Stack
//{
//public:
//	Stack(int n = 4)
//	{
//		_a = (STDataType*)malloc(sizeof(STDataType) * n);
//		if (nullptr == _a)
//		{
//			perror("malloc申请空间失败");
//			return;
//		}
//		_capacity = n;
//		_top = 0;
//	}
//private:
//	STDataType* _a;
//	size_t _capacity;
//	size_t _top;
//};
//// 两个Stack实现队列
//class MyQueue
//{
//public:
//	//编译器默认生成MyQueue的构造函数调用Stack的构造，完成了两个成员的初始化
//private:
//	Stack pushst;
//	Stack popst;
//};
//int main()
//{
//	MyQueue mq;
//	return 0;
//}
//#include<iostream>
//using namespace std;
//class Date
//{
//private:
//	int _year;
//	int _month;
//	int _day;
//
//public:
//	void Print()
//	{
//		cout << _year << "年" << _month << "月" << _day << "日" << endl;
//	}
//};
//
//int main()
//{
//	Date d1;//调用编译器生成的默认构造函数
//	d1.Print();
//	return 0;
//}

//#include<iostream>
//using namespace std;
//class Date
//{
//private:
//	int _year;
//	int _month;
//	int _day;
//	
//public:
//	//构造函数
//	//成员函数前面有一个隐含的this指针
//	// Date* const this
//	Date(int year,int month,int day)
//	{
//		_year = year;//相当于this->_year = year;
//		_month = month;
//		//this->_month = month;
//		_day = day;
//		//this->_day = day;
//	}
//	void Print()
//	{
//		cout << _year << "年" << _month << "月" << _day << "日" << endl;
//	}
//};
//
//int main()
//{
//	Date d1(2024, 11, 11);//调用自己写的构造函数，满足我们的需求
//	d1.Print();
//	return 0;
//}


//#include<iostream>
//using namespace std;
//class Date
//{
//public:
//	//构造函数函数名与类名相同
//	Date()
//	{
//		//构造函数
//		cout << "Date()" << endl;
//	}
//	//析构函数
//	~Date()
//	{
//		cout << "~Date()" << endl;
//	}
//private:
//	int _year;
//};
//int main()
//{
//	Date d1;//创建一个对象
//	return 0;
//}


//#include<iostream>
//using namespace std;
//typedef int STDataType;
//class Stack
//{
//public:
//	//默认构造满足不了需求，需要自己写的构造函数
//	Stack(int n = 4)
//	{
//		_a = (STDataType*)malloc(sizeof(STDataType) * n);
//		if (nullptr == _a)
//		{
//			perror("malloc申请空间失败");
//			return;
//		}
//		_capacity = n;
//		_top = 0;
//	}
//	// ...
//private:
//	STDataType* _a;
//	size_t _capacity;
//	size_t _top;
//};
//
//// 两个Stack实现队列
//class MyQueue
//{
//public:
//	//编译器默认生成MyQueue的构造函数调用Stack的构造，完成了两个成员的初始化
//private:
//	Stack pushst;
//	Stack popst;
//};
//int main()
//{
//	MyQueue mq;
//	return 0;
//}


#include<iostream>
using namespace std;
typedef int STDataType;
class Stack
{
public:
	Stack(int n = 4)
	{
		_a = (STDataType*)malloc(sizeof(STDataType) * n);
		if (nullptr == _a)
		{
			perror("malloc申请空间失败");
			return;
		}
		_capacity = n;
		_top = 0;
	}
	//栈的析构函数必须自己写，释放资源
	~Stack()
	{
		cout << "~Stack()" << endl;
		free(_a);
		_a = nullptr;
		_top = _capacity = 0;
	}
private:
	STDataType* _a;
	size_t _capacity;
	size_t _top;
};
// 两个Stack实现队列
class MyQueue
{
public:
	//编译器默认生成MyQueue的析构函数调用了Stack的析构，释放的Stack内部的资源
	// 显示写析构，也会自动调用Stack的析构，这才是真正的释放资源
	~MyQueue()
	{
		cout << "~MyQueue" << endl;
	}
private:
	Stack pushst;
	Stack popst;
};
int main()
{
	Stack st;
	MyQueue mq;
	return 0;
}